package com.sondon.dev_soceket.business;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

import com.sondon.dev_soceket.config.CMD;
import com.sondon.dev_soceket.model.TCPEntity;
import com.sondon.dev_soceket.tcp.util.CodeUtil;

/**
 * 
 * @Project : DevInfoWeb
 * @Package : com.sondon.dev_soceket.business
 * @Class : SoftwareDown.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime：2015年4月28日 下午5:38:38
 * @Blog：http://blog.csdn.net/caiwenfeng_for_23
 * @Description :  { 程序下载 }
 */
public class SoftwareDown {
	
	/**
	 * @Author 蔡文锋
	 * @Data_Time  2015年4月21日 下午4:52:36
	 * @Description { 服务端向设备程序下载信息 }
	 * @param DATA
	 * @return
	 */
	public static TCPEntity GetMsg(String offset) {
		String file_path="/home/mayi/git/JAVA_C_Socket/README.md";
		if("".equals(offset)){
			 offset="00000000";
		}
		int off=CodeUtil.HexStringToInt(offset);
		TCPEntity response = new TCPEntity();
		  RandomAccessFile raf = null;
		  byte[] file_bytes=new byte[1024];
	            try {
					raf = new RandomAccessFile(file_path, "r");
					raf.seek(off);
					int read_index=raf.read(file_bytes,0,1024);
					if(read_index<1024){
						file_bytes=Arrays.copyOfRange(file_bytes, 0, read_index);
						System.out.println("file_bytes length :"+file_bytes.length+"   read_index :"+read_index);
					}
					off=off+read_index;
					
					//设备参数配置报文
					// CMD
					response.setCMD(CodeUtil.IntToHexString(CMD.Req_Down_File));
					// Data 参数配置
					String data="90"//程序类型
										+(CodeUtil.IntToHexString(off)+"00000000").substring(0, 8)//偏移量
										+CodeUtil.CRC16Table(file_bytes)//内容的CRC16值
										+(CodeUtil.IntToHexString(file_bytes.length) + "00").substring(0, 4)//内容长度
										+CodeUtil.printHexString(file_bytes, file_bytes.length);//二进制流
					response.setDATA(data);
					// LEN DATA长度
					response.setLEN((CodeUtil.IntToHexString(data.length()/2) + "0000").substring(0, 4));
					// CRC16校验
					response.setCRC16(CodeUtil.getCRC16(response));
					// System.out.println("response   :"+response.toString());
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}finally{
					try {
						raf.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
		return response;
	}
	
	/**
	 * @Author 蔡文锋
	 * @Data_Time  2015年4月21日 下午4:52:26
	 * @Description { 解析设备回应 }
	 * @param DATA
	 * @return
	 */
	public static void DeCode(String DATA) {
			String type,result,error_code,rec_len;
			type=DATA.substring(0, 4);
			result=DATA.substring(4, 8);
			error_code=DATA.substring(8, 12);
			rec_len=DATA.substring(12, 20);
			System.out.println("type :"+type+"  result :"+result+"  error_code :"+error_code+"  rec_len :"+rec_len);
			
			/**
			 * 等待添加业务处理
			 */
	}
}
